/**
 *  用于管理及使用中间件 
 */

module.exports = class Middleware {

    constructor(  ){

    }

    config( opt ){
        if( !opt ) return this.opt 
        this.opt = opt 
    }

    service( services ){
        if( services ) this._SERVICES = services 
        return this._SERVICES
    }

    /**
     *  Getter/Setter   必须重写或者在构造函数中设置名称，方便系统识别中间件名称
     * @param {*} n
     */
    name( n ){
        if( !n )  return this.name 
        this.name = n 
    }

    /**
     *  启动当前中间件
     * @param {*} opt
     */
    async start( ){

    }

    /**
     *  结束当前中间件
     * @param {*} opt 
     */
    async stop( ){

    }

    /**
     *  当运行出现错误时的处理方式
     * @param {*} err 
     */
    async error( err ){
        
    }

    /**
     *  start() 前执行
     * @param {*} opt 
     */
    before( ){

    }

    /**
     *  start() 后执行
     * @param {*} opt 
     */
    after( ){

    }

    /**
     *  返回监听信息
     */
    watch(){

    }

    /**
     *  所有程序执行完后执行
     * @param {*} opt 
     */
    async final( ){

    }

}
